iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 14
1

傳入任意數量的引數到函式

有時候我們不知道函式預先需要接收多少個引數,這時候我可以使用一個星號來建立空多元組,或兩個星號建立空字典,我們就先直接來看範例吧 !

  • 一個星號(建立空多元組)

範例如下 :

def get_name(*names): # *names參數中的星號會讓python建立一個名字為names的空多元組
    for name in names:
        print("hello,"+name)
    
get_name("bonny","steven")
get_name("jack")
get_name("rose","john","jane")

輸出結果 :

hello,bonny
hello,steven
hello,jack
hello,rose
hello,john
hello,jane

如果上述的程式碼沒有for迴圈那行,那麼程式碼就會出錯,因為for迴圈的工作是把多元組裡的值一一輸出出來,所以如果沒有for迴圈那行而直接印出的話,是印出多元組而不是印出接收到的字串值,多元組是不能跟字串相加的,所以它會跑出下列這種錯誤

TypeError: can only concatenate str (not "tuple") to str

  • 兩個星號(建立空字典)

範例如下 :

def users(first_name,last_name,**user_info): # **user_info參數中的星號會讓python建立一個名字為user_info的空字典
    user={}  
    user["first"]=first_name # 將first_name新增至user字典
    user["last"]=last_name # 將last_name新增至user字典
    for key,value in user_info.items(): # 用迴圈遍訪user_info裡的鍵值對並將其新增至user字典
        user[key]=value
    return user
    
user1=users("bonny","chang",city="taipei")
print(user1)
user2=users("steven","chang",city="taoyuan")
print(user2)

輸出結果 :

{'first': 'bonny', 'last': 'chang', 'city': 'taipei'}
{'first': 'steven', 'last': 'chang', 'city': 'taoyuan'}

將函式存到模組中

函式的優點是他們可以跟主程式分開放置,所以將函式儲存在一個獨立的檔案中,這個檔案就稱為模組

  • 匯入整個模組

import name會讓python在執行這行指令時開啟name.py檔,並將其都複製到get_name.py檔中,這樣get_name.py檔才可以用get_name函式,呼叫函式的用法是給定模組名稱和函式名稱,中間以句號(.)分隔連接就可以了!

↓ name.py檔

def get_name(*names):
    for name in names:
        print("hello,"+name)

↓ get_name.py檔

import name

name.get_name("bonny")
name.get_name("jack","rose")

輸出結果 :

hello,bonny
hello,jack
hello,rose
  • 使用as為模組指定別名

使用as其實只是為模組取一個叫短的別名,方便我們使用

↓ name.py檔

def get_name(*names):
    for name in names:
        print("hello,"+name)

↓ get_name.py檔

import name as n

n.get_name("bonny")
n.get_name("jack","rose")

輸出結果 :

hello,bonny
hello,jack
hello,rose
  • 匯入特定函式

假如name.py檔裡有兩個函式,但我們只需要get_name函式時,我們就要匯入特定函式,如果想要匯入多個函式,可以用逗號分隔,呼叫的方式不用再寫出模組名稱,只需要給定函式名稱就好

↓ name.py檔

def get_name(*names):
    for name in names:
        print("hello,"+name)
        
def get_city(*cities):
    for city in cities:
        print(city)

↓ get_name.py檔

from name import get_name

get_name("bonny")
get_name("jack","rose")

輸出結果 :

hello,bonny
hello,jack
hello,rose
  • 使用as為函式指定別名

↓ name.py檔

def get_name(*names):
    for name in names:
        print("hello,"+name)

def get_city(*cities):
    for city in cities:
        print(city)

↓ get_name.py檔

from name import get_name as gn

gn("bonny")
gn("jack","rose")

輸出結果 :

hello,bonny
hello,jack
hello,rose
  • 匯入模組中所有函式

用星號( * )運算子可以讓python匯入模組中所有的函式

↓ name.py檔

def get_name(*names):
    for name in names:
        print("hello,"+name)

def get_city(*cities):
    for city in cities:
        print(city)

↓ get_name.py檔

from name import *

get_name("bonny")
get_city("taipei")

輸出結果 :

hello,bonny
taipei

附上排版較精美的
HackMD 網址 : https://hackmd.io/Qm4ZmEm-Ta2dsCFDLCYUrw

今天結束,各位明天見


資料來源:<<python程式設計的樂趣>>-Eric Matthes著/H&C譯


上一篇
DAY 13 函式應用( 1 )
下一篇
DAY 15 簡介類別 Class
系列文
初學者Python的應用實作30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言